/*
 * ClienteEmpresa.java
 *
 * Created on 16 de Maio de 2007, 15:01
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package pt.iscte.dcti.es.rhplus.utilizador;

import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Hashtable;
import java.util.LinkedList;

import pt.iscte.dcti.es.rhplus.sistema.CodigoPostal;
import pt.iscte.dcti.es.rhplus.sistema.persistencia.AcessoBD;

public class ClienteEmpresa extends Cliente {

    private int id_empresa;
    private int numero_de_ordem;

    /** Creates a new instance of ClienteEmpresa */
    public ClienteEmpresa(final int id_pessoa, final String nome, final char sexo, final int bi, final Date data_de_nascimento, final int nif,
            final String email, final int telefone, final int telemovel, final String morada, final String grupo_sanguineo,
            final CodigoPostal codigo_postal, final LinkedList<TratamentoPassado> lista_de_tratamentos_passados,
            LinkedList<DoencaPassada> lista_de_doencas_passadas, final int numero_de_cliente, final LinkedList<MembroDoAgregado> membros_do_agregado,
            final int id_empresa, final int numero_de_ordem) {

        super(id_pessoa, nome, sexo, bi, data_de_nascimento, nif, email, telefone, telemovel, morada, grupo_sanguineo, codigo_postal,
                lista_de_tratamentos_passados, lista_de_doencas_passadas, numero_de_cliente, membros_do_agregado);

        this.id_empresa = id_empresa;
        this.numero_de_ordem = numero_de_ordem;
        this.tipo = "empresa";
    }

    public int getIdEmpresa() {
        return id_empresa;
    }

    public void setIdEmpresa(final int id_empresa) {
        this.id_empresa = id_empresa;
    }

    public int getNumeroDeOrdem() {
        return numero_de_ordem;
    }

    public static ClienteEmpresa devolve(final String username) throws SQLException, ClassNotFoundException, InstantiationException,
            IllegalAccessException {

        // Consulta a BD
        AcessoBD acesso_bd = new AcessoBD();
        acesso_bd.carregaDriverEAbreLigacao();

        String qryName = new String("visualizar_cliente_empresa_por_username");

        Hashtable<String, Object> dados_da_pessoa = new Hashtable<String, Object>();
        dados_da_pessoa.put("var_username", username);

        ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_pessoa);
        result_set.next();

        int id_codigo_postal = result_set.getInt("id_codigo_postal");

        // Cria o Membro do Agregado e os outros elementos necessarios
        int id_pessoa = result_set.getInt("id_pessoa");
        String nome = result_set.getString("nome");
        char sexo = result_set.getString("sexo").charAt(0);
        int bi = result_set.getInt("bi");
        Date data_de_nascimento = result_set.getDate("data_de_nascimento");
        int nif = result_set.getInt("nif");
        String email = result_set.getString("email");
        int telefone = result_set.getInt("telefone");
        int telemovel = result_set.getInt("telemovel");
        String morada = result_set.getString("morada");
        String grupo_sanguineo = result_set.getString("grupo_sanguineo");
        int numero_de_cliente = result_set.getInt("numero_de_cliente");
        int id_empresa = result_set.getInt("id_empresa");
        int numero_de_ordem = result_set.getInt("numero_de_ordem");

        acesso_bd.fechaLigacao();

        CodigoPostal codigo_postal = CodigoPostal.devolve(id_codigo_postal);

        LinkedList<TratamentoPassado> lista_de_tratamentos_passados = TratamentoPassado.devolveTodosDoUtente(id_pessoa);
        LinkedList<DoencaPassada> lista_de_doencas_passadas = DoencaPassada.devolveTodasDoUtente(id_pessoa);
        LinkedList<MembroDoAgregado> membros_do_agregado = MembroDoAgregado.devolveTodosDoCliente(id_pessoa);

        ClienteEmpresa cliente_empresa = new ClienteEmpresa(id_pessoa, nome, sexo, bi, data_de_nascimento, nif, email, telefone, telemovel, morada,
                grupo_sanguineo, codigo_postal, lista_de_tratamentos_passados, lista_de_doencas_passadas, numero_de_cliente, membros_do_agregado,
                id_empresa, numero_de_ordem);

        return cliente_empresa;
    }

    public static ClienteEmpresa devolve(final int id_cliente)
            throws SQLException, ClassNotFoundException, InstantiationException,
            IllegalAccessException {

        // Consulta a BD
        AcessoBD acesso_bd = new AcessoBD();
        acesso_bd.carregaDriverEAbreLigacao();

        String qryName = new String("visualizar_cliente_empresa_por_id");

        Hashtable<String, Object> dados_da_pessoa = new Hashtable<String, Object>();
        dados_da_pessoa.put("var_id_cliente", id_cliente);

        ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_pessoa);
        result_set.next();

        int id_codigo_postal = result_set.getInt("id_codigo_postal");

        // Cria o Membro do Agregado e os outros elementos necessarios
        String nome = result_set.getString("nome");
        char sexo = result_set.getString("sexo").charAt(0);
        int bi = result_set.getInt("bi");
        Date data_de_nascimento = result_set.getDate("data_de_nascimento");
        int nif = result_set.getInt("nif");
        String email = result_set.getString("email");
        int telefone = result_set.getInt("telefone");
        int telemovel = result_set.getInt("telemovel");
        String morada = result_set.getString("morada");
        String grupo_sanguineo = result_set.getString("grupo_sanguineo");
        int numero_de_cliente = result_set.getInt("numero_de_cliente");
        int id_empresa = result_set.getInt("id_empresa");
        int numero_de_ordem = result_set.getInt("numero_de_ordem");

        acesso_bd.fechaLigacao();

        CodigoPostal codigo_postal = CodigoPostal.devolve(id_codigo_postal);

        LinkedList<TratamentoPassado> lista_de_tratamentos_passados = TratamentoPassado.devolveTodosDoUtente(id_cliente);
        LinkedList<DoencaPassada> lista_de_doencas_passadas = DoencaPassada.devolveTodasDoUtente(id_cliente);
        LinkedList<MembroDoAgregado> membros_do_agregado = MembroDoAgregado.devolveTodosDoCliente(id_cliente);

        ClienteEmpresa cliente_empresa = new ClienteEmpresa(id_cliente, nome, sexo, bi, data_de_nascimento, nif, email, telefone, telemovel, morada,
                grupo_sanguineo, codigo_postal, lista_de_tratamentos_passados, lista_de_doencas_passadas, numero_de_cliente, membros_do_agregado,
                id_empresa, numero_de_ordem);

        return cliente_empresa;
    }

    public static void insere(final Hashtable<String, Object> dados_cliente_empresa) throws SQLException, ClassNotFoundException,
            InstantiationException, IllegalAccessException {

        Cliente.insereEmpresa(dados_cliente_empresa);

    }

    public String getTipo() {
        return "empresa";
    }

}
